package contable.dominio;

/**
 * Inventario total de un producto o insumo
 *
 * @author jaime
 */
public class Inventario {

    private int producto;
    private double costo;
    private double precio;
    private int cantidad;
    private double monto;

    /**
     * Obtener el código del producto o insumo del inventario
     *
     * @return El código del producto o insumo
     */
    public int getProducto() {
        return producto;
    }

    /**
     * Definir el código del producto o insumo del inventario
     *
     * @param producto Código que identifica al producto o insumo
     */
    public void setProducto(int producto) {
        if (producto < 0) {
            throw new IllegalArgumentException("El código del producto no puede ser negativo");
        }
        this.producto = producto;
    }

    /**
     * Obtener la cantidad disponible de un producto o insumo del inventario
     *
     * @return La cantidad disponible de un producto o insumo
     */
    public int getCantidad() {
        return cantidad;
    }

    /**
     * Definir la cantidad disponible de un producto o insumo en el inventario
     *
     * @param cantidad La cantidad disponible
     */
    public void setCantidad(int cantidad) {
        if (cantidad < 0) {
            throw new IllegalArgumentException("La cantidad del inventario no puede ser negativa");
        } else {
            this.cantidad = cantidad;
        }
    }

    /**
     * Obtener el costo de un producto o insumo del inventario
     *
     * @return El costo unitario de un producto o insumo
     */
    public double getCosto() {
        return costo;
    }

    /**
     * Definir el precio de un producto o insumo en el inventario
     *
     * @param costo El costo unitario de un producto o insumo
     */
    public void setCosto(double costo) {
        if (costo < 0) {
            throw new IllegalArgumentException("El costo del producto o insumo no puede ser negativo");
        } else {
            this.costo = (double) Math.round(costo * 100) / 100;
        }
    }

    /**
     * Obtener el precio de un producto del inventario
     *
     * @return El precio unitario de un producto
     */
    public double getPrecio() {
        return precio;
    }

    /**
     * Definir el precio de un producto en el inventario
     *
     * @param precio El precio unitario de un producto
     */
    public void setPrecio(double precio) {
        this.precio = (double) Math.round(precio * 100) / 100;
    }

    /**
     * Obtener el monto de un producto o insumo del inventario
     *
     * @return El valor total de un producto o insumo
     */
    public double getMonto() {
        return monto;
    }

    /**
     * Establecer el monto de un producto o insumo
     */
    public void setMonto() {
        this.monto = (double) Math.round((costo * cantidad) * 100) / 100;
    }

    @Override
    public String toString() {
        return "ID producto: " + producto
                + "\nCantidad: " + cantidad
                + "\nMonto: $ " + monto
                + "\nCosto: $ " + costo
                + "\nPrecio: " + precio;
    }
}
